package br.com.ds3.controller;

import java.util.List;

import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.view.Results;
import br.com.ds3.annotation.Permission;
import br.com.ds3.dao.EventoDAO;
import br.com.ds3.model.Evento;
import br.com.ds3.model.Perfil;

@Resource
public class EventoController {
    private final Result result;
	private final EventoDAO eventoDAO;
    
    public EventoController(Result result, EventoDAO eventoDAO) {
        this.result = result;
        this.eventoDAO = eventoDAO;
    }
 
    @Permission(value = { Perfil.ADMINISTRADOR, Perfil.ATENDENTE })
    public void pesquisa(String nome, Long pagina) {
    	pagina = pagina == null ? 1L : pagina;
        Long paginas = eventoDAO.countPaginas(nome);
    	List<Evento> eventos = eventoDAO.pesquisa(nome, pagina);
        
        result.include("nome", nome);
        result.include("pagina", pagina);
        result.include("paginas", paginas);
        result.include("eventos", eventos);
    }
    
    @Permission(value = { Perfil.ADMINISTRADOR, Perfil.ATENDENTE })
    public void grava(Evento evento) {   	
    	eventoDAO.save(evento);
    	result.use(Results.json()).withoutRoot().from(evento).serialize();
    }
    
    @Permission(value = { Perfil.ADMINISTRADOR, Perfil.ATENDENTE })
    public void cadastro(Long id) {
    	Evento evento = null;
    	
    	if (id != null) {
    		evento = eventoDAO.get(id);
    	} else {
    		evento = new Evento();
    	}

    	result.include("evento", evento);
    }
    
    @Permission(value = { Perfil.ADMINISTRADOR, Perfil.ATENDENTE })
    public void inclui() {	
    	result.forwardTo(this).cadastro(null);
    }
    
    @Permission(value = { Perfil.ADMINISTRADOR, Perfil.ATENDENTE })
    public void altera(Long id) {
    	result.forwardTo(this).cadastro(id);
    }
    
    @Permission(value = { Perfil.ADMINISTRADOR, Perfil.ATENDENTE })
    public void exclui(Long id) {   	
    	eventoDAO.delete(eventoDAO.get(id));
    	
    	result.use(Results.status()).ok();
    }  
}
